import configparser
import os


def load_config(config_path=None):
    """
    :param config_path: 配置文件路径，默认为项目根目录下的conf/config.ini
    :return: 包含配置的字典，自动尝试类型转换
    """
    if config_path is None:
        # 获取项目根目录的绝对路径
        project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        config_path = os.path.join(project_root, 'conf', 'config.ini')
    
    if not os.path.exists(config_path):
        raise FileNotFoundError(f"配置文件 {config_path} 不存在")

    config = configparser.ConfigParser()
    config.read(config_path, encoding="utf-8")

    def _convert_value(v: str):
        """尝试将字符串值转换为合适的类型"""
        v = v.strip()

        # 处理列表
        if ',' in v:
            return [_convert_value(x) for x in v.split(',') if x.strip()]

        # 处理布尔值
        if v.lower() in ('true', 'false'):
            return v.lower() == 'true'

        # 处理数字
        try:
            return int(v)
        except ValueError:
            try:
                return float(v)
            except ValueError:
                return v

    config_dict = {}
    for section in config.sections():
        config_dict[section] = {}
        for key, value in config[section].items():
            config_dict[section][key] = _convert_value(value)

    return config_dict
